package co.gov.medellin.sdep.sisdep.integration.catastro;

import java.util.ArrayList;
import java.util.List;

import co.gov.medellin.sdep.sisdep.integration.catastro.holders.TableOfZecattBapiSisdepHolder;
import co.gov.medellin.sdep.sisdep.integration.catastro.holders.TableOfZecattMensajesHolder;

/**
 * Clase que permite realizar consultas al Sistema de Catastro de la Alcaldia de Medellin 
 * por informacion sobre los bienes raiz asociados con un ciudadano.
 * 
 * @author carlos.perez@consult-soft.com
 * @version 06-06-2012 
 */
public class CatastroWSClient implements java.io.Serializable {
	
	/** Serial key. */
	private static final long serialVersionUID = -1184747484848700426L;
	
	private String endPoint;
	private String user;
	private String password;
	
	private Zws_informacion_sisdep_Service catastroWS;
	private Zws_informacion_sisdep_PortType catastroPort;
	
	/**
	 * Metodo que realiza la inicializacion de los objetos necesarios para el acceso 
	 * al servicio WEB de Catastro. Este metodo se debe usar en el 
	 * en el portal SAP de la Alcaldia pues hace uso del Servicio WEB de Catastro que NO esta
	 * disponible localmente en un entorno de DLLO.
	 * 
	 * @author carlos.perez@consult-soft.com
	 * @version 06-06-2012
	 *  
	 */
	private void setupWSClient() throws Exception {
		catastroWS = new Zws_informacion_sisdep_ServiceLocator(getEndPoint());
		catastroPort = catastroWS.getzws_informacion_sisdep();
		((org.apache.axis.client.Stub)catastroPort).setUsername(getUser());
		((org.apache.axis.client.Stub)catastroPort).setPassword(getPassword()); 
	}
	
	/**
	 * Metodo que establece un valor de NULO para el endPoint del Servicio de Catastro. 
	 * Este metodo se debe usar en el entorno de DLLO local con el fin de realizar la 
	 * implementacion de los modulos que necesiten simular una consulta de Catastro.
	 * 
	 * @author carlos.perez@consult-soft.com
	 * @version 06-06-2012
	 *  
	 */
	private void setupWSClientDefault() {
		catastroPort = null;
	}

	/**
	 * Metodo que permite consultar los datos de Catastro de una persona que tenga infomacion 
	 * asociada con la Alcaldia de Medellin.
	 * NOTA: Se envia como parametro de invocacion el numero de cedula de ciudadania.
	 * 
	 * @param documentID
	 * @return List lista de propiedades asociadas a la persona
	 * 
	 * @author carlos.perez@consult-soft.com
	 * @version 07-06-2012 
	 * 
	 */
	public List loadCatastroDataByDocID(String documentID) {
		List propiedadesItemList = null;
		
		// Se verifica el acceso al endPoint de servicio WEB:
		if(catastroPort != null) {
			try {
				ZecattMensajes defaultMsg =  new ZecattMensajes("");
				ZecattMensajes[] defaultMsgArray = {defaultMsg};    
				TableOfZecattMensajesHolder msgHolder = new TableOfZecattMensajesHolder(defaultMsgArray);
	
				TableOfZecattBapiSisdepHolder tableHolder = new TableOfZecattBapiSisdepHolder();
	
				String resultMsg = catastroPort.zcattBapiDatosSisdep(documentID, msgHolder, tableHolder);
				propiedadesItemList = new ArrayList(tableHolder.value.length);
				for(int k = 0;k < tableHolder.value.length;k++) {
					ZecattBapiSisdep item = tableHolder.value[k];
					propiedadesItemList.add(item);
				}
			} catch(Exception e) {
				System.err.println("SISDEP::CatastroWSClient.loadCatastroDataByDocID(documentID)-->" + documentID);
				e.printStackTrace(System.err);			
			}
		}
		return propiedadesItemList;
	}
		
	/**
	 * @return
	 */
	public String getEndPoint() {
		return endPoint;
	}

	/**
	 * @param string
	 */
	public void setEndPoint(String string) {
		endPoint = string;
	}

	/**
	 * @return the user
	 */
	public String getUser() {
		return user;
	}

	/**
	 * @param user the user to set
	 */
	public void setUser(String user) {
		this.user = user;
	}

	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * @param password the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}

}
